home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 151-175 / disk_161 / perl / perl.cat < prev    next >
Text File  |  1992-05-06  |  80KB  |  2,426 lines

  1. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2.  
  3.  
  4.  
  5. NAME
  6.      perl - Practical Extraction and Report Language
  7.  
  8. SYNOPSIS
  9.      perl [options] filename args
  10.  
  11. DESCRIPTION
  12.      Perl is a interpreted language optimized for scanning arbi-
  13.      trary text files, extracting information from those text
  14.      files, and printing reports based on that information.  It's
  15.      also a good language for many system management tasks.  The
  16.      language is intended to be practical (easy to use, effi-
  17.      cient, complete) rather than beautiful (tiny, elegant,
  18.      minimal).  It combines (in the author's opinion, anyway)
  19.      some of the best features of C, sed, awk, and sh, so people
  20.      familiar with those languages should have little difficulty
  21.      with it.  (Language historians will also note some vestiges
  22.      of csh, Pascal, and even BASIC-PLUS.) Expression syntax
  23.      corresponds quite closely to C expression syntax.  If you
  24.      have a problem that would ordinarily use sed or awk or sh,
  25.      but it exceeds their capabilities or must run a little fas-
  26.      ter, and you don't want to write the silly thing in C, then
  27.      perl may be for you.  There are also translators to turn
  28.      your sed and awk scripts into perl scripts.  OK, enough
  29.      hype.
  30.  
  31.      Upon startup, perl looks for your script in one of the fol-
  32.      lowing places:
  33.  
  34.      1.  Specified line by line via -e switches on the command
  35.          line.
  36.  
  37.      2.  Contained in the file specified by the first filename on
  38.          the command line.  (Note that systems supporting the #!
  39.          notation invoke interpreters this way.)
  40.  
  41.      3.  Passed in via standard input.
  42.  
  43.      After locating your script, perl compiles it to an internal
  44.      form.  If the script is syntactically correct, it is exe-
  45.      cuted.
  46.  
  47.      Options
  48.  
  49.      Note: on first reading this section may not make much sense
  50.      to you.  It's here at the front for easy reference.
  51.  
  52.      A single-character option may be combined with the following
  53.      option, if any.  This is particularly useful when invoking a
  54.      script using the #! construct which only allows one argu-
  55.      ment.  Example:
  56.  
  57.  
  58.  
  59.  
  60. Printed 7/26/88               LOCAL                             1
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. PERL(1)             UNIX Programmer's Manual              PERL(1)
  68.  
  69.  
  70.  
  71.           #!/bin/perl -spi.bak     # same as -s -p -i.bak
  72.           ...
  73.  
  74.      Options include:
  75.  
  76.      -D<number>
  77.           sets debugging flags.  To watch how it executes your
  78.           script, use -D14. (This only works if debugging is com-
  79.           piled into your perl.)
  80.  
  81.      -e commandline
  82.           may be used to enter one line of script.  Multiple -e
  83.           commands may be given to build up a multi-line script.
  84.           If -e is given, perl will not look for a script
  85.           filename in the argument list.
  86.  
  87.      -i<extension>
  88.           specifies that files processed by the <> construct are
  89.           to be edited in-place.  It does this by renaming the
  90.           input file, opening the output file by the same name,
  91.           and selecting that output file as the default for print
  92.           statements.  The extension, if supplied, is added to
  93.           the name of the old file to make a backup copy.  If no
  94.           extension is supplied, no backup is made.  Saying "perl
  95.           -p -i.bak -e "s/foo/bar/;" ... " is the same as using
  96.           the script:
  97.  
  98.                #!/bin/perl -pi.bak
  99.                s/foo/bar/;
  100.  
  101.           which is equivalent to
  102.  
  103.                #!/bin/perl
  104.                while (<>) {
  105.                     if ($ARGV ne $oldargv) {
  106.                          rename($ARGV,$ARGV . '.bak');
  107.                          open(ARGVOUT,">$ARGV");
  108.                          select(ARGVOUT);
  109.                          $oldargv = $ARGV;
  110.                     }
  111.                     s/foo/bar/;
  112.                }
  113.                continue {
  114.                    print;     # this prints to original filename
  115.                }
  116.                select(stdout);
  117.  
  118.           except that the -i form doesn't need to compare $ARGV
  119.           to $oldargv to know when the filename has changed.  It
  120.           does, however, use ARGVOUT for the selected filehandle.
  121.           Note that stdout is restored as the default output
  122.           filehandle after the loop.
  123.  
  124.  
  125.  
  126. Printed 7/26/88               LOCAL                             2
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. PERL(1)             UNIX Programmer's Manual              PERL(1)
  134.  
  135.  
  136.  
  137.      -I<directory>
  138.           may be used in conjunction with -P to tell the C
  139.           preprocessor where to look for include files.  By
  140.           default /usr/include and /usr/lib/perl are searched.
  141.  
  142.      -n   causes perl to assume the following loop around your
  143.           script, which makes it iterate over filename arguments
  144.           somewhat like "sed -n" or awk:
  145.  
  146.                while (<>) {
  147.                     ...       # your script goes here
  148.                }
  149.  
  150.           Note that the lines are not printed by default.  See -p
  151.           to have lines printed.
  152.  
  153.      -p   causes perl to assume the following loop around your
  154.           script, which makes it iterate over filename arguments
  155.           somewhat like sed:
  156.  
  157.                while (<>) {
  158.                     ...       # your script goes here
  159.                } continue {
  160.                     print;
  161.                }
  162.  
  163.           Note that the lines are printed automatically.  To
  164.           suppress printing use the -n switch.  A -p overrides a
  165.           -n switch.
  166.  
  167.      -P   causes your script to be run through the C preprocessor
  168.           before compilation by perl. (Since both comments and
  169.           cpp directives begin with the # character, you should
  170.           avoid starting comments with any words recognized by
  171.           the C preprocessor such as "if", "else" or "define".)
  172.  
  173.      -s   enables some rudimentary switch parsing for switches on
  174.           the command line after the script name but before any
  175.           filename arguments (or before a --).  Any switch found
  176.           there is removed from @ARGV and sets the corresponding
  177.           variable in the perl script.  The following script
  178.           prints "true" if and only if the script is invoked with
  179.           a -xyz switch.
  180.  
  181.                #!/bin/perl -s
  182.                if ($xyz) { print "true\n"; }
  183.  
  184.  
  185.      -v   prints the version and patchlevel of your perl execut-
  186.           able.
  187.  
  188.  
  189.  
  190.  
  191.  
  192. Printed 7/26/88               LOCAL                             3
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199. PERL(1)             UNIX Programmer's Manual              PERL(1)
  200.  
  201.  
  202.  
  203.      Data Types and Objects
  204.  
  205.      Perl has about two and a half data types: strings, arrays of
  206.      strings, and associative arrays.  Strings and arrays of
  207.      strings are first class objects, for the most part, in the
  208.      sense that they can be used as a whole as values in an
  209.      expression.  Associative arrays can only be accessed on an
  210.      association by association basis; they don't have a value as
  211.      a whole (at least not yet).
  212.  
  213.      Strings are interpreted numerically as appropriate.  A
  214.      string is interpreted as TRUE in the boolean sense if it is
  215.      not the null string or 0.  Booleans returned by operators
  216.      are 1 for true and '0' or '' (the null string) for false.
  217.  
  218.      References to string variables always begin with '$', even
  219.      when referring to a string that is part of an array.  Thus:
  220.  
  221.          $days           # a simple string variable
  222.          $days[28]       # 29th element of array @days
  223.          $days{'Feb'}    # one value from an associative array
  224.  
  225.      but entire arrays are denoted by '@':
  226.  
  227.          @days           # ($days[0], $days[1],... $days[n])
  228.  
  229.  
  230.      Any of these four constructs may be assigned to (in compiler
  231.      lingo, may serve as an lvalue).  (Additionally, you may find
  232.      the length of array @days by evaluating "$#days", as in csh.
  233.      [Actually, it's not the length of the array, it's the sub-
  234.      script of the last element, since there is (ordinarily) a
  235.      0th element.])
  236.  
  237.      Every data type has its own namespace.  You can, without
  238.      fear of conflict, use the same name for a string variable,
  239.      an array, an associative array, a filehandle, a subroutine
  240.      name, and/or a label.  Since variable and array references
  241.      always start with '$' or '@', the "reserved" words aren't in
  242.      fact reserved with respect to variable names.  (They ARE
  243.      reserved with respect to labels and filehandles, however,
  244.      which don't have an initial special character.) Case IS
  245.      significant--"FOO", "Foo" and "foo" are all different names.
  246.      Names which start with a letter may also contain digits and
  247.      underscores.  Names which do not start with a letter are
  248.      limited to one character, e.g. "$%" or "$$".  (Many one
  249.      character names have a predefined significance to perl. More
  250.      later.)
  251.  
  252.      String literals are delimited by either single or double
  253.      quotes.  They work much like shell quotes: double-quoted
  254.      string literals are subject to backslash and variable
  255.  
  256.  
  257.  
  258. Printed 7/26/88               LOCAL                             4
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. PERL(1)             UNIX Programmer's Manual              PERL(1)
  266.  
  267.  
  268.  
  269.      substitution; single-quoted strings are not.  The usual
  270.      backslash rules apply for making characters such as newline,
  271.      tab, etc.  You can also embed newlines directly in your
  272.      strings, i.e. they can end on a different line than they
  273.      begin.  This is nice, but if you forget your trailing quote,
  274.      the error will not be reported until perl finds another line
  275.      containing the quote character, which may be much further on
  276.      in the script.  Variable substitution inside strings is lim-
  277.      ited (currently) to simple string variables.  The following
  278.      code segment prints out "The price is $100."
  279.  
  280.          $Price = '$100';               # not interpreted
  281.          print "The price is $Price.\n";# interpreted
  282.  
  283.      Note that you can put curly brackets around the identifier
  284.      to delimit it from following alphanumerics.
  285.  
  286.      Array literals are denoted by separating individual values
  287.      by commas, and enclosing the list in parentheses.  In a con-
  288.      text not requiring an array value, the value of the array
  289.      literal is the value of the final element, as in the C comma
  290.      operator.  For example,
  291.  
  292.          @foo = ('cc', '-E', $bar);
  293.  
  294.      assigns the entire array value to array foo, but
  295.  
  296.          $foo = ('cc', '-E', $bar);
  297.  
  298.      assigns the value of variable bar to variable foo.  Array
  299.      lists may be assigned to if and only if each element of the
  300.      list is an lvalue:
  301.  
  302.          ($a, $b, $c) = (1, 2, 3);
  303.  
  304.          ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
  305.  
  306.  
  307.      Numeric literals are specified in any of the usual floating
  308.      point or integer formats.
  309.  
  310.      There are several other pseudo-literals that you should know
  311.      about.  If a string is enclosed by backticks (grave
  312.      accents), it is interpreted as a command, and the output of
  313.      that command is the value of the pseudo-literal, just like
  314.      in any of the standard shells.  The command is executed each
  315.      time the pseudo-literal is evaluated.  Unlike in csh, no
  316.      interpretation is done on the data--newlines remain new-
  317.      lines.  The status value of the command is returned in $?.
  318.  
  319.      Evaluating a filehandle in angle brackets yields the next
  320.      line from that file (newline included, so it's never false
  321.  
  322.  
  323.  
  324. Printed 7/26/88               LOCAL                             5
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331. PERL(1)             UNIX Programmer's Manual              PERL(1)
  332.  
  333.  
  334.  
  335.      until EOF).  Ordinarily you must assign that value to a
  336.      variable, but there is one situation where in which an
  337.      automatic assignment happens.  If (and only if) the input
  338.      symbol is the only thing inside the conditional of a while
  339.      loop, the value is automatically assigned to the variable
  340.      "$_".  (This may seem like an odd thing to you, but you'll
  341.      use the construct in almost every perl script you write.)
  342.      Anyway, the following lines are equivalent to each other:
  343.  
  344.          while ($_ = <stdin>) {
  345.          while (<stdin>) {
  346.          for (;<stdin>;) {
  347.  
  348.      The filehandles stdin, stdout and stderr are predefined.
  349.      Additional filehandles may be created with the open func-
  350.      tion.
  351.  
  352.      The null filehandle <> is special and can be used to emulate
  353.      the behavior of sed and awk.  Input from <> comes either
  354.      from standard input, or from each file listed on the command
  355.      line.  Here's how it works: the first time <> is evaluated,
  356.      the ARGV array is checked, and if it is null, $ARGV[0] is
  357.      set to '-', which when opened gives you standard input.  The
  358.      ARGV array is then processed as a list of filenames.  The
  359.      loop
  360.  
  361.           while (<>) {
  362.                ...            # code for each line
  363.           }
  364.  
  365.      is equivalent to
  366.  
  367.           unshift(@ARGV, '-') if $#ARGV < $[;
  368.           while ($ARGV = shift) {
  369.                open(ARGV, $ARGV);
  370.                while (<ARGV>) {
  371.                     ...       # code for each line
  372.                }
  373.           }
  374.  
  375.      except that it isn't as cumbersome to say.  It really does
  376.      shift array ARGV and put the current filename into variable
  377.      ARGV.  It also uses filehandle ARGV internally.  You can
  378.      modify @ARGV before the first <> as long as you leave the
  379.      first filename at the beginning of the array.  Line numbers
  380.      ($.) continue as if the input was one big happy file.
  381.  
  382.      If you want to set @ARGV to your own list of files, go right
  383.      ahead.  If you want to pass switches into your script, you
  384.      can put a loop on the front like this:
  385.  
  386.  
  387.  
  388.  
  389.  
  390. Printed 7/26/88               LOCAL                             6
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397. PERL(1)             UNIX Programmer's Manual              PERL(1)
  398.  
  399.  
  400.  
  401.           while ($_ = $ARGV[0], /^-/) {
  402.                shift;
  403.               last if /^--$/;
  404.                /^-D(.*)/ && ($debug = $1);
  405.                /^-v/ && $verbose++;
  406.                ...       # other switches
  407.           }
  408.           while (<>) {
  409.                ...       # code for each line
  410.           }
  411.  
  412.      The <> symbol will return FALSE only once.  If you call it
  413.      again after this it will assume you are processing another
  414.      @ARGV list, and if you haven't set @ARGV, will input from
  415.      stdin.
  416.  
  417.      Syntax
  418.  
  419.      A perl script consists of a sequence of declarations and
  420.      commands.  The only things that need to be declared in perl
  421.      are report formats and subroutines.  See the sections below
  422.      for more information on those declarations.  All objects are
  423.      assumed to start with a null or 0 value.  The sequence of
  424.      commands is executed just once, unlike in sed and awk
  425.      scripts, where the sequence of commands is executed for each
  426.      input line.  While this means that you must explicitly loop
  427.      over the lines of your input file (or files), it also means
  428.      you have much more control over which files and which lines
  429.      you look at.  (Actually, I'm lying--it is possible to do an
  430.      implicit loop with either the -n or -p switch.)
  431.  
  432.      A declaration can be put anywhere a command can, but has no
  433.      effect on the execution of the primary sequence of commands.
  434.      Typically all the declarations are put at the beginning or
  435.      the end of the script.
  436.  
  437.      Perl is, for the most part, a free-form language.  (The only
  438.      exception to this is format declarations, for fairly obvious
  439.      reasons.) Comments are indicated by the # character, and
  440.      extend to the end of the line.  If you attempt to use /* */
  441.      C comments, it will be interpreted either as division or
  442.      pattern matching, depending on the context.  So don't do
  443.      that.
  444.  
  445.      Compound statements
  446.  
  447.      In perl, a sequence of commands may be treated as one com-
  448.      mand by enclosing it in curly brackets.  We will call this a
  449.      BLOCK.
  450.  
  451.      The following compound commands may be used to control flow:
  452.  
  453.  
  454.  
  455.  
  456. Printed 7/26/88               LOCAL                             7
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463. PERL(1)             UNIX Programmer's Manual              PERL(1)
  464.  
  465.  
  466.  
  467.           if (EXPR) BLOCK
  468.           if (EXPR) BLOCK else BLOCK
  469.           if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
  470.           LABEL while (EXPR) BLOCK
  471.           LABEL while (EXPR) BLOCK continue BLOCK
  472.           LABEL for (EXPR; EXPR; EXPR) BLOCK
  473.           LABEL BLOCK continue BLOCK
  474.  
  475.      Note that, unlike C and Pascal, these are defined in terms
  476.      of BLOCKs, not statements.  This means that the curly brack-
  477.      ets are required--no dangling statements allowed.  If you
  478.      want to write conditionals without curly brackets there are
  479.      several other ways to do it.  The following all do the same
  480.      thing:
  481.  
  482.          if (!open(foo)) { die "Can't open $foo"; }
  483.          die "Can't open $foo" unless open(foo);
  484.          open(foo) || die "Can't open $foo"; # foo or bust!
  485.          open(foo) ? die "Can't open $foo" : 'hi mom';
  486.                         # a bit exotic, that last one
  487.  
  488.  
  489.      The if statement is straightforward.  Since BLOCKs are
  490.      always bounded by curly brackets, there is never any ambi-
  491.      guity about which if an else goes with.  If you use unless
  492.      in place of if, the sense of the test is reversed.
  493.  
  494.      The while statement executes the block as long as the
  495.      expression is true (does not evaluate to the null string or
  496.      0).  The LABEL is optional, and if present, consists of an
  497.      identifier followed by a colon.  The LABEL identifies the
  498.      loop for the loop control statements next, last and redo
  499.      (see below).  If there is a continue BLOCK, it is always
  500.      executed just before the conditional is about to be
  501.      evaluated again, similarly to the third part of a for loop
  502.      in C.  Thus it can be used to increment a loop variable,
  503.      even when the loop has been continued via the next statement
  504.      (similar to the C "continue" statement).
  505.  
  506.      If the word while is replaced by the word until, the sense
  507.      of the test is reversed, but the conditional is still tested
  508.      before the first iteration.
  509.  
  510.      In either the if or the while statement, you may replace
  511.      "(EXPR)" with a BLOCK, and the conditional is true if the
  512.      value of the last command in that block is true.
  513.  
  514.      The for loop works exactly like the corresponding while
  515.      loop:
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522. Printed 7/26/88               LOCAL                             8
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529. PERL(1)             UNIX Programmer's Manual              PERL(1)
  530.  
  531.  
  532.  
  533.           for ($i = 1; $i < 10; $i++) {
  534.                ...
  535.           }
  536.  
  537.      is the same as
  538.  
  539.           $i = 1;
  540.           while ($i < 10) {
  541.                ...
  542.           } continue {
  543.                $i++;
  544.           }
  545.  
  546.      The BLOCK by itself (labeled or not) is equivalent to a loop
  547.      that executes once.  Thus you can use any of the loop con-
  548.      trol statements in it to leave or restart the block.  The
  549.      continue block is optional.  This construct is particularly
  550.      nice for doing case structures.
  551.  
  552.           foo: {
  553.                if (/abc/) { $abc = 1; last foo; }
  554.                if (/def/) { $def = 1; last foo; }
  555.                if (/xyz/) { $xyz = 1; last foo; }
  556.                $nothing = 1;
  557.           }
  558.  
  559.  
  560.      Simple statements
  561.  
  562.      The only kind of simple statement is an expression evaluated
  563.      for its side effects.  Every expression (simple statement)
  564.      must be terminated with a semicolon.  Note that this is like
  565.      C, but unlike Pascal (and awk).
  566.  
  567.      Any simple statement may optionally be followed by a single
  568.      modifier, just before the terminating semicolon.  The possi-
  569.      ble modifiers are:
  570.  
  571.           if EXPR
  572.           unless EXPR
  573.           while EXPR
  574.           until EXPR
  575.  
  576.      The if and unless modifiers have the expected semantics.
  577.      The while and unless modifiers also have the expected seman-
  578.      tics (conditional evaluated first), except when applied to a
  579.      do-BLOCK command, in which case the block executes once
  580.      before the conditional is evaluated.  This is so that you
  581.      can write loops like:
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588. Printed 7/26/88               LOCAL                             9
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595. PERL(1)             UNIX Programmer's Manual              PERL(1)
  596.  
  597.  
  598.  
  599.           do {
  600.                $_ = <stdin>;
  601.                ...
  602.           } until $_ eq ".\n";
  603.  
  604.      (See the do operator below.  Note also that the loop control
  605.      commands described later will NOT work in this construct,
  606.      since modifiers don't take loop labels.  Sorry.)
  607.  
  608.      Expressions
  609.  
  610.      Since perl expressions work almost exactly like C expres-
  611.      sions, only the differences will be mentioned here.
  612.  
  613.      Here's what perl has that C doesn't:
  614.  
  615.      ()      The null list, used to initialize an array to null.
  616.  
  617.      .       Concatenation of two strings.
  618.  
  619.      .=      The corresponding assignment operator.
  620.  
  621.      eq      String equality (== is numeric equality).  For a
  622.              mnemonic just think of "eq" as a string.  (If you
  623.              are used to the awk behavior of using == for either
  624.              string or numeric equality based on the current form
  625.              of the comparands, beware!  You must be explicit
  626.              here.)
  627.  
  628.      ne      String inequality (!= is numeric inequality).
  629.  
  630.      lt      String less than.
  631.  
  632.      gt      String greater than.
  633.  
  634.      le      String less than or equal.
  635.  
  636.      ge      String greater than or equal.
  637.  
  638.      =~      Certain operations search or modify the string "$_"
  639.              by default.  This operator makes that kind of opera-
  640.              tion work on some other string.  The right argument
  641.              is a search pattern, substitution, or translation.
  642.              The left argument is what is supposed to be
  643.              searched, substituted, or translated instead of the
  644.              default "$_".  The return value indicates the suc-
  645.              cess of the operation.  (If the right argument is an
  646.              expression other than a search pattern, substitu-
  647.              tion, or translation, it is interpreted as a search
  648.              pattern at run time.  This is less efficient than an
  649.              explicit search, since the pattern must be compiled
  650.              every time the expression is evaluated.) The
  651.  
  652.  
  653.  
  654. Printed 7/26/88               LOCAL                            10
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661. PERL(1)             UNIX Programmer's Manual              PERL(1)
  662.  
  663.  
  664.  
  665.              precedence of this operator is lower than unary
  666.              minus and autoincrement/decrement, but higher than
  667.              everything else.
  668.  
  669.      !~      Just like =~ except the return value is negated.
  670.  
  671.      x       The repetition operator.  Returns a string consist-
  672.              ing of the left operand repeated the number of times
  673.              specified by the right operand.
  674.  
  675.                   print '-' x 80;          # print row of dashes
  676.                   print '-' x80;      # illegal, x80 is identifier
  677.  
  678.                   print "\t" x ($tab/8), ' ' x ($tab%8);  # tab over
  679.  
  680.  
  681.      x=      The corresponding assignment operator.
  682.  
  683.      ..      The range operator, which is bistable.  It is false
  684.              as long as its left argument is false.  Once the
  685.              left argument is true, it stays true until the right
  686.              argument is true, AFTER which it becomes false
  687.              again.  (It doesn't become false till the next time
  688.              it's evaluated.  It can become false on the same
  689.              evaluation it became true, but it still returns true
  690.              once.) The .. operator is primarily intended for
  691.              doing line number ranges after the fashion of sed or
  692.              awk.  The precedence is a little lower than || and
  693.              &&.  The value returned is either the null string
  694.              for false, or a sequence number (beginning with 1)
  695.              for true.  The sequence number is reset for each
  696.              range encountered.  The final sequence number in a
  697.              range has the string 'E0' appended to it, which
  698.              doesn't affect its numeric value, but gives you
  699.              something to search for if you want to exclude the
  700.              endpoint.  You can exclude the beginning point by
  701.              waiting for the sequence number to be greater than
  702.              1.  If either argument to .. is static, that argu-
  703.              ment is implicitly compared to the $. variable, the
  704.              current line number.  Examples:
  705.  
  706.                  if (101 .. 200) { print; }     # print 2nd hundred lines
  707.  
  708.                  next line if (1 .. /^$/); # skip header lines
  709.  
  710.                  s/^/> / if (/^$/ .. eof());    # quote body
  711.  
  712.  
  713.      -x      A file test.  This unary operator takes one argu-
  714.              ment, a filename, and tests the file to see if some-
  715.              thing is true about it.  It returns 1 for true and
  716.              '' for false.  Precedence is higher than logical and
  717.  
  718.  
  719.  
  720. Printed 7/26/88               LOCAL                            11
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727. PERL(1)             UNIX Programmer's Manual              PERL(1)
  728.  
  729.  
  730.  
  731.              relational operators, but lower than arithmetic
  732.              operators.  The operator may be any of:
  733.                   -r   File is readable by effective uid.
  734.                   -w   File is writeable by effective uid.
  735.                   -x   File is executable by effective uid.
  736.                   -o   File is owned by effective uid.
  737.                   -R   File is readable by real uid.
  738.                   -W   File is writeable by real uid.
  739.                   -X   File is executable by real uid.
  740.                   -O   File is owned by real uid.
  741.                   -e   File exists.
  742.                   -z   File has zero size.
  743.                   -s   File has non-zero size.
  744.                   -f   File is a plain file.
  745.                   -d   File is a directory.
  746.                   -l   File is a symbolic link.
  747.  
  748.              Example:
  749.  
  750.                   while (<>) {
  751.                        chop;
  752.                        next unless -f $_;  # ignore specials
  753.                        ...
  754.                   }
  755.  
  756.              Note that -s/a/b/ does not do a negated substitu-
  757.              tion.
  758.  
  759.      Here is what C has that perl doesn't:
  760.  
  761.      unary &     Address-of operator.
  762.  
  763.      unary *     Dereference-address operator.
  764.  
  765.      Like C, perl does a certain amount of expression evaluation
  766.      at compile time, whenever it determines that all of the
  767.      arguments to an operator are static and have no side
  768.      effects.  In particular, string concatenation happens at
  769.      compile time between literals that don't do variable substi-
  770.      tution.  Backslash interpretation also happens at compile
  771.      time.  You can say
  772.  
  773.           'Now is the time for all' . "\n" .
  774.           'good men to come to.'
  775.  
  776.      and this all reduces to one string internally.
  777.  
  778.      Along with the literals and variables mentioned earlier, the
  779.      following operations can serve as terms in an expression:
  780.  
  781.      /PATTERN/i
  782.              Searches a string for a pattern, and returns true
  783.  
  784.  
  785.  
  786. Printed 7/26/88               LOCAL                            12
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793. PERL(1)             UNIX Programmer's Manual              PERL(1)
  794.  
  795.  
  796.  
  797.              (1) or false ('').  If no string is specified via
  798.              the =~ or !~ operator, the $_ string is searched.
  799.              (The string specified with =~ need not be an
  800.              lvalue--it may be the result of an expression
  801.              evaluation, but remember the =~ binds rather
  802.              tightly.) See also the section on regular expres-
  803.              sions.
  804.  
  805.              If you prepend an `m' you can use any pair of char-
  806.              acters as delimiters.  This is particularly useful
  807.              for matching Unix path names that contain `/'.  If
  808.              the final delimiter is followed by the optional
  809.              letter `i', the matching is done in a case-
  810.              insensitive manner.
  811.  
  812.              Examples:
  813.  
  814.                  open(tty, '/dev/tty');
  815.                  <tty> =~ /^y/i && do foo();    # do foo if desired
  816.  
  817.                  if (/Version: *([0-9.]*)/) { $version = $1; }
  818.  
  819.                  next if m#^/usr/spool/uucp#;
  820.  
  821.  
  822.      ?PATTERN?
  823.              This is just like the /pattern/ search, except that
  824.              it matches only once between calls to the reset
  825.              operator.  This is a useful optimization when you
  826.              only want to see the first occurence of something in
  827.              each of a set of files, for instance.
  828.  
  829.      chdir EXPR
  830.              Changes the working directory to EXPR, if possible.
  831.              Returns 1 upon success, 0 otherwise.  See example
  832.              under die().
  833.  
  834.      chmod LIST
  835.              Changes the permissions of a list of files.  The
  836.              first element of the list must be the numerical
  837.              mode.  LIST may be an array, in which case you may
  838.              wish to use the unshift() command to put the mode on
  839.              the front of the array.  Returns the number of files
  840.              successfully changed.  Note: in order to use the
  841.              value you must put the whole thing in parentheses.
  842.  
  843.                   $cnt = (chmod 0755,'foo','bar');
  844.  
  845.  
  846.      chop(VARIABLE)
  847.  
  848.  
  849.  
  850.  
  851.  
  852. Printed 7/26/88               LOCAL                            13
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859. PERL(1)             UNIX Programmer's Manual              PERL(1)
  860.  
  861.  
  862.  
  863.      chop    Chops off the last character of a string and returns
  864.              it.  It's used primarily to remove the newline from
  865.              the end of an input record, but is much more effi-
  866.              cient than s/\n// because it neither scans nor
  867.              copies the string.  If VARIABLE is omitted, chops
  868.              $_.  Example:
  869.  
  870.                   while (<>) {
  871.                        chop;     # avoid \n on last field
  872.                        @array = split(/:/);
  873.                        ...
  874.                   }
  875.  
  876.  
  877.      chown LIST
  878.              Changes the owner (and group) of a list of files.
  879.              LIST may be an array.  The first two elements of the
  880.              list must be the NUMERICAL uid and gid, in that
  881.              order.  Returns the number of files successfully
  882.              changed.  Note: in order to use the value you must
  883.              put the whole thing in parentheses.
  884.  
  885.                   $cnt = (chown $uid,$gid,'foo');
  886.  
  887.              Here's an example of looking up non-numeric uids:
  888.  
  889.                   print "User: ";
  890.                   $user = <stdin>;
  891.                   chop($user);
  892.                   open(pass,'/etc/passwd') || die "Can't open passwd";
  893.                   while (<pass>) {
  894.                        ($login,$pass,$uid,$gid) = split(/:/);
  895.                        $uid{$login} = $uid;
  896.                        $gid{$login} = $gid;
  897.                   }
  898.                   @ary = ('foo','bar','bie','doll');
  899.                   if ($uid{$user} eq '') {
  900.                        die "$user not in passwd file";
  901.                   }
  902.                   else {
  903.                        unshift(@ary,$uid{$user},$gid{$user});
  904.                        chown @ary;
  905.                   }
  906.  
  907.  
  908.      close(FILEHANDLE)
  909.  
  910.      close FILEHANDLE
  911.              Closes the file or pipe associated with the file
  912.              handle.  You don't have to close FILEHANDLE if you
  913.              are immediately going to do another open on it,
  914.              since open will close it for you.  (See open.)
  915.  
  916.  
  917.  
  918. Printed 7/26/88               LOCAL                            14
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925. PERL(1)             UNIX Programmer's Manual              PERL(1)
  926.  
  927.  
  928.  
  929.              However, an explicit close on an input file resets
  930.              the line counter ($.), while the implicit close done
  931.              by open does not.  Also, closing a pipe will wait
  932.              for the process executing on the pipe to complete,
  933.              in case you want to look at the output of the pipe
  934.              afterwards.  Example:
  935.  
  936.                   open(output,'|sort >foo');    # pipe to sort
  937.                   ...  # print stuff to output
  938.                   close(output);      # wait for sort to finish
  939.                   open(input,'foo');  # get sort's results
  940.  
  941.  
  942.      crypt(PLAINTEXT,SALT)
  943.              Encrypts a string exactly like the crypt() function
  944.              in the C library.  Useful for checking the password
  945.              file for lousy passwords.  Only the guys wearing
  946.              white hats should do this.
  947.  
  948.      die EXPR
  949.              Prints the value of EXPR to stderr and exits with a
  950.              non-zero status.  Equivalent examples:
  951.  
  952.                   die "Can't cd to spool." unless chdir '/usr/spool/news';
  953.  
  954.                   (chdir '/usr/spool/news') || die "Can't cd to spool."
  955.  
  956.              Note that the parens are necessary above due to pre-
  957.              cedence.  See also exit.
  958.  
  959.      do BLOCK
  960.              Returns the value of the last command in the
  961.              sequence of commands indicated by BLOCK.  When modi-
  962.              fied by a loop modifier, executes the BLOCK once
  963.              before testing the loop condition.  (On other state-
  964.              ments the loop modifiers test the conditional
  965.              first.)
  966.  
  967.      do SUBROUTINE (LIST)
  968.              Executes a SUBROUTINE declared by a sub declaration,
  969.              and returns the value of the last expression
  970.              evaluated in SUBROUTINE.  (See the section on sub-
  971.              routines later on.)
  972.  
  973.      each(ASSOC_ARRAY)
  974.              Returns a 2 element array consisting of the key and
  975.              value for the next value of an associative array, so
  976.              that you can iterate over it.  Entries are returned
  977.              in an apparently random order.  When the array is
  978.              entirely read, a null array is returned (which when
  979.              assigned produces a FALSE (0) value).  The next call
  980.              to each() after that will start iterating again.
  981.  
  982.  
  983.  
  984. Printed 7/26/88               LOCAL                            15
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991. PERL(1)             UNIX Programmer's Manual              PERL(1)
  992.  
  993.  
  994.  
  995.              The iterator can be reset only by reading all the
  996.              elements from the array.  You should not modify the
  997.              array while iterating over it.  The following prints
  998.              out your environment like the printenv program, only
  999.              in a different order:
  1000.  
  1001.                   while (($key,$value) = each(ENV)) {
  1002.                        print "$key=$value\n";
  1003.                   }
  1004.  
  1005.              See also keys() and values().
  1006.  
  1007.      eof(FILEHANDLE)
  1008.  
  1009.      eof     Returns 1 if the next read on FILEHANDLE will return
  1010.              end of file, or if FILEHANDLE is not open.  If
  1011.              (FILEHANDLE) is omitted, the eof status is returned
  1012.              for the last file read.  The null filehandle may be
  1013.              used to indicate the pseudo file formed of the files
  1014.              listed on the command line, i.e. eof() is reasonable
  1015.              to use inside a while (<>) loop.  Example:
  1016.  
  1017.                   # insert dashes just before last line
  1018.                   while (<>) {
  1019.                        if (eof()) {
  1020.                             print "--------------\n";
  1021.                        }
  1022.                        print;
  1023.                   }
  1024.  
  1025.  
  1026.      eval EXPR
  1027.              EXPR is parsed and executed as if it were a little
  1028.              perl program.  It is executed in the context of the
  1029.              current perl program, so that any variable settings,
  1030.              subroutine or format definitions remain afterwards.
  1031.              The value returned is the value of the last expres-
  1032.              sion evaluated, just as with subroutines.  If there
  1033.              is a syntax error or runtime error, a null string is
  1034.              returned by eval, and $@ is set to the error mes-
  1035.              sage.  If there was no error, $@ is null.  If EXPR
  1036.              is omitted, evaluates $_.
  1037.  
  1038.      exec LIST
  1039.              If there is more than one argument in LIST, calls
  1040.              execvp() with the arguments in LIST.  If there is
  1041.              only one argument, the argument is checked for shell
  1042.              metacharacters.  If there are any, the entire argu-
  1043.              ment is passed to /bin/sh -c for parsing.  If there
  1044.              are none, the argument is split into words and
  1045.              passed directly to execvp(), which is more effi-
  1046.              cient.  Note: exec (and system) do not flush your
  1047.  
  1048.  
  1049.  
  1050. Printed 7/26/88               LOCAL                            16
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1058.  
  1059.  
  1060.  
  1061.              output buffer, so you may need to set $| to avoid
  1062.              lost output.
  1063.  
  1064.      exit EXPR
  1065.              Evaluates EXPR and exits immediately with that
  1066.              value.  Example:
  1067.  
  1068.                   $ans = <stdin>;
  1069.                   exit 0 if $ans =~ /^[Xx]/;
  1070.  
  1071.              See also die.
  1072.  
  1073.      exp(EXPR)
  1074.              Returns e to the power of EXPR.
  1075.  
  1076.      fork    Does a fork() call.  Returns the child pid to the
  1077.              parent process and 0 to the child process.  Note:
  1078.              unflushed buffers remain unflushed in both
  1079.              processes, which means you may need to set $| to
  1080.              avoid duplicate output.
  1081.  
  1082.      gmtime(EXPR)
  1083.              Converts a time as returned by the time function to
  1084.              a 9-element array with the time analyzed for the
  1085.              Greenwich timezone.  Typically used as follows:
  1086.  
  1087.                  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
  1088.                     = gmtime(time);
  1089.  
  1090.              All array elements are numeric.
  1091.  
  1092.      goto LABEL
  1093.              Finds the statement labeled with LABEL and resumes
  1094.              execution there.  Currently you may only go to
  1095.              statements in the main body of the program that are
  1096.              not nested inside a do {} construct.  This statement
  1097.              is not implemented very efficiently, and is here
  1098.              only to make the sed-to-perl translator easier.  Use
  1099.              at your own risk.
  1100.  
  1101.      hex(EXPR)
  1102.              Returns the decimal value of EXPR interpreted as an
  1103.              hex string.  (To interpret strings that might start
  1104.              with 0 or 0x see oct().)
  1105.  
  1106.      index(STR,SUBSTR)
  1107.              Returns the position of SUBSTR in STR, based at 0,
  1108.              or whatever you've set the $[ variable to.  If the
  1109.              substring is not found, returns one less than the
  1110.              base, ordinarily -1.
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116. Printed 7/26/88               LOCAL                            17
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1124.  
  1125.  
  1126.  
  1127.      int(EXPR)
  1128.              Returns the integer portion of EXPR.
  1129.  
  1130.      join(EXPR,LIST)
  1131.  
  1132.      join(EXPR,ARRAY)
  1133.              Joins the separate strings of LIST or ARRAY into a
  1134.              single string with fields separated by the value of
  1135.              EXPR, and returns the string.  Example:
  1136.  
  1137.                  $_ = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
  1138.  
  1139.              See split.
  1140.  
  1141.      keys(ASSOC_ARRAY)
  1142.              Returns a normal array consisting of all the keys of
  1143.              the named associative array.  The keys are returned
  1144.              in an apparently random order, but it is the same
  1145.              order as either the values() or each() function pro-
  1146.              duces (given that the associative array has not been
  1147.              modified).  Here is yet another way to print your
  1148.              environment:
  1149.  
  1150.                   @keys = keys(ENV);
  1151.                   @values = values(ENV);
  1152.                   while ($#keys >= 0) {
  1153.                        print pop(keys),'=',pop(values),"\n";
  1154.                   }
  1155.  
  1156.  
  1157.      kill LIST
  1158.              Sends a signal to a list of processes.  The first
  1159.              element of the list must be the (numerical) signal
  1160.              to send.  LIST may be an array, in which case you
  1161.              may wish to use the unshift command to put the sig-
  1162.              nal on the front of the array.  Returns the number
  1163.              of processes successfully signaled.  Note: in order
  1164.              to use the value you must put the whole thing in
  1165.              parentheses:
  1166.  
  1167.                   $cnt = (kill 9,$child1,$child2);
  1168.  
  1169.              If the signal is negative, kills process groups
  1170.              instead of processes.  (On System V, a negative pro-
  1171.              cess number will also kill process groups, but
  1172.              that's not portable.)
  1173.  
  1174.      last LABEL
  1175.  
  1176.      last    The last command is like the break statement in C
  1177.              (as used in loops); it immediately exits the loop in
  1178.              question.  If the LABEL is omitted, the command
  1179.  
  1180.  
  1181.  
  1182. Printed 7/26/88               LOCAL                            18
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1190.  
  1191.  
  1192.  
  1193.              refers to the innermost enclosing loop.  The con-
  1194.              tinue block, if any, is not executed:
  1195.  
  1196.                   line: while (<stdin>) {
  1197.                        last line if /^$/;  # exit when done with header
  1198.                        ...
  1199.                   }
  1200.  
  1201.  
  1202.      localtime(EXPR)
  1203.              Converts a time as returned by the time function to
  1204.              a 9-element array with the time analyzed for the
  1205.              local timezone.  Typically used as follows:
  1206.  
  1207.                  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
  1208.                     = localtime(time);
  1209.  
  1210.              All array elements are numeric.
  1211.  
  1212.      log(EXPR)
  1213.              Returns logarithm (base e) of EXPR.
  1214.  
  1215.      next LABEL
  1216.  
  1217.      next    The next command is like the continue statement in
  1218.              C; it starts the next iteration of the loop:
  1219.  
  1220.                   line: while (<stdin>) {
  1221.                        next line if /^#/;  # discard comments
  1222.                        ...
  1223.                   }
  1224.  
  1225.              Note that if there were a continue block on the
  1226.              above, it would get executed even on discarded
  1227.              lines.  If the LABEL is omitted, the command refers
  1228.              to the innermost enclosing loop.
  1229.  
  1230.      length(EXPR)
  1231.              Returns the length in characters of the value of
  1232.              EXPR.
  1233.  
  1234.      link(OLDFILE,NEWFILE)
  1235.              Creates a new filename linked to the old filename.
  1236.              Returns 1 for success, 0 otherwise.
  1237.  
  1238.      oct(EXPR)
  1239.              Returns the decimal value of EXPR interpreted as an
  1240.              octal string.  (If EXPR happens to start off with
  1241.              0x, interprets it as a hex string instead.) The fol-
  1242.              lowing will handle decimal, octal and hex in the
  1243.              standard notation:
  1244.  
  1245.  
  1246.  
  1247.  
  1248. Printed 7/26/88               LOCAL                            19
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1256.  
  1257.  
  1258.  
  1259.                   $val = oct($val) if $val =~ /^0/;
  1260.  
  1261.  
  1262.      open(FILEHANDLE,EXPR)
  1263.  
  1264.      open(FILEHANDLE)
  1265.  
  1266.      open FILEHANDLE
  1267.              Opens the file whose filename is given by EXPR, and
  1268.              associates it with FILEHANDLE.  If EXPR is omitted,
  1269.              the string variable of the same name as the FILEHAN-
  1270.              DLE contains the filename.  If the filename begins
  1271.              with ">", the file is opened for output.  If the
  1272.              filename begins with ">>", the file is opened for
  1273.              appending.  If the filename begins with "|", the
  1274.              filename is interpreted as a command to which output
  1275.              is to be piped, and if the filename ends with a "|",
  1276.              the filename is interpreted as command which pipes
  1277.              input to us.  (You may not have a command that pipes
  1278.              both in and out.) Opening '-' opens stdin and open-
  1279.              ing '>-' opens stdout.  Open returns 1 upon success,
  1280.              '' otherwise.  Examples:
  1281.  
  1282.                  $article = 100;
  1283.                  open article || die "Can't find article $article";
  1284.                  while (<article>) {...
  1285.  
  1286.                  open(log, '>>/usr/spool/news/twitlog');
  1287.  
  1288.                  open(article, "caeser <$article |");          # decrypt article
  1289.  
  1290.                  open(extract, "|sort >/tmp/Tmp$$");      # $$ is our process#
  1291.  
  1292.  
  1293.      ord(EXPR)
  1294.              Returns the ascii value of the first character of
  1295.              EXPR.
  1296.  
  1297.      pop ARRAY
  1298.  
  1299.      pop(ARRAY)
  1300.              Pops and returns the last value of the array, shor-
  1301.              tening the array by 1.
  1302.  
  1303.      print FILEHANDLE LIST
  1304.  
  1305.      print LIST
  1306.  
  1307.      print   Prints a string or comma-separated list of strings.
  1308.              If FILEHANDLE is omitted, prints by default to stan-
  1309.              dard output (or to the last selected output
  1310.              channel--see select()).  If LIST is also omitted,
  1311.  
  1312.  
  1313.  
  1314. Printed 7/26/88               LOCAL                            20
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1322.  
  1323.  
  1324.  
  1325.              prints $_ to stdout.  LIST may also be an array
  1326.              value.  To set the default output channel to some-
  1327.              thing other than stdout use the select operation.
  1328.  
  1329.      printf FILEHANDLE LIST
  1330.  
  1331.      printf LIST
  1332.              Equivalent to a "print FILEHANDLE sprintf(LIST)".
  1333.  
  1334.      push(ARRAY,EXPR)
  1335.              Treats ARRAY (@ is optional) as a stack, and pushes
  1336.              the value of EXPR onto the end of ARRAY.  The length
  1337.              of ARRAY increases by 1.  Has the same effect as
  1338.  
  1339.                  $ARRAY[$#ARRAY+1] = EXPR;
  1340.  
  1341.              but is more efficient.
  1342.  
  1343.      redo LABEL
  1344.  
  1345.      redo    The redo command restarts the loop block without
  1346.              evaluating the conditional again.  The continue
  1347.              block, if any, is not executed.  If the LABEL is
  1348.              omitted, the command refers to the innermost enclos-
  1349.              ing loop.  This command is normally used by programs
  1350.              that want to lie to themselves about what was just
  1351.              input:
  1352.  
  1353.                   # a simpleminded Pascal comment stripper
  1354.                   # (warning: assumes no { or } in strings)
  1355.                   line: while (<stdin>) {
  1356.                        while (s|({.*}.*){.*}|$1 |) {}
  1357.                        s|{.*}| |;
  1358.                        if (s|{.*| |) {
  1359.                             $front = $_;
  1360.                             while (<stdin>) {
  1361.                                  if (/}/) {     # end of comment?
  1362.                                       s|^|$front{|;
  1363.                                       redo line;
  1364.                                  }
  1365.                             }
  1366.                        }
  1367.                        print;
  1368.                   }
  1369.  
  1370.  
  1371.      rename(OLDNAME,NEWNAME)
  1372.              Changes the name of a file.  Returns 1 for success,
  1373.              0 otherwise.
  1374.  
  1375.      reset EXPR
  1376.              Generally used in a continue block at the end of a
  1377.  
  1378.  
  1379.  
  1380. Printed 7/26/88               LOCAL                            21
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1388.  
  1389.  
  1390.  
  1391.              loop to clear variables and reset ?? searches so
  1392.              that they work again.  The expression is interpreted
  1393.              as a list of single characters (hyphens allowed for
  1394.              ranges).  All string variables beginning with one of
  1395.              those letters are set to the null string.  If the
  1396.              expression is omitted, one-match searches (?pat-
  1397.              tern?) are reset to match again.  Always returns 1.
  1398.              Examples:
  1399.  
  1400.                  reset 'X';      # reset all X variables
  1401.                  reset 'a-z';    # reset lower case variables
  1402.                  reset;          # just reset ?? searches
  1403.  
  1404.  
  1405.      s/PATTERN/REPLACEMENT/gi
  1406.              Searches a string for a pattern, and if found,
  1407.              replaces that pattern with the replacement text and
  1408.              returns the number of substitutions made.  Otherwise
  1409.              it returns false (0).  The "g" is optional, and if
  1410.              present, indicates that all occurences of the pat-
  1411.              tern are to be replaced.  The "i" is also optional,
  1412.              and if present, indicates that matching is to be
  1413.              done in a case-insensitive manner.  Any delimiter
  1414.              may replace the slashes; if single quotes are used,
  1415.              no interpretation is done on the replacement string.
  1416.              If no string is specified via the =~ or !~ operator,
  1417.              the $_ string is searched and modified.  (The string
  1418.              specified with =~ must be a string variable or array
  1419.              element, i.e. an lvalue.) If the pattern contains a
  1420.              $ that looks like a variable rather than an end-of-
  1421.              string test, the variable will be interpolated into
  1422.              the pattern at run-time.  See also the section on
  1423.              regular expressions.  Examples:
  1424.  
  1425.                  s/\bgreen\b/mauve/g;      # don't change wintergreen
  1426.  
  1427.                  $path =~ s|/usr/bin|/usr/local/bin|;
  1428.  
  1429.                  s/Login: $foo/Login: $bar/; # run-time pattern
  1430.  
  1431.                  s/([^ ]*) *([^ ]*)/$2 $1/;     # reverse 1st two fields
  1432.  
  1433.              (Note the use of $ instead of \ in the last example.
  1434.              See section on regular expressions.)
  1435.  
  1436.      seek(FILEHANDLE,POSITION,WHENCE)
  1437.              Randomly positions the file pointer for FILEHANDLE,
  1438.              just like the fseek() call of stdio.  Returns 1 upon
  1439.              success, 0 otherwise.
  1440.  
  1441.      select(FILEHANDLE)
  1442.              Sets the current default filehandle for output.
  1443.  
  1444.  
  1445.  
  1446. Printed 7/26/88               LOCAL                            22
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1454.  
  1455.  
  1456.  
  1457.              This has two effects: first, a write or a print
  1458.              without a filehandle will default to this FILEHAN-
  1459.              DLE.  Second, references to variables related to
  1460.              output will refer to this output channel.  For exam-
  1461.              ple, if you have to set the top of form format for
  1462.              more than one output channel, you might do the fol-
  1463.              lowing:
  1464.  
  1465.                  select(report1);
  1466.                  $^ = 'report1_top';
  1467.                  select(report2);
  1468.                  $^ = 'report2_top';
  1469.  
  1470.              Select happens to return TRUE if the file is
  1471.              currently open and FALSE otherwise, but this has no
  1472.              effect on its operation.
  1473.  
  1474.      shift(ARRAY)
  1475.  
  1476.      shift ARRAY
  1477.  
  1478.      shift   Shifts the first value of the array off and returns
  1479.              it, shortening the array by 1 and moving everything
  1480.              down.  If ARRAY is omitted, shifts the ARGV array.
  1481.              See also unshift(), push() and pop().  Shift() and
  1482.              unshift() do the same thing to the left end of an
  1483.              array that push() and pop() do to the right end.
  1484.  
  1485.      sleep EXPR
  1486.  
  1487.      sleep   Causes the script to sleep for EXPR seconds, or for-
  1488.              ever if no EXPR.  May be interrupted by sending the
  1489.              process a SIGALARM.  Returns the number of seconds
  1490.              actually slept.
  1491.  
  1492.      split(/PATTERN/,EXPR)
  1493.  
  1494.      split(/PATTERN/)
  1495.  
  1496.      split   Splits a string into an array of strings, and
  1497.              returns it.  If EXPR is omitted, splits the $_
  1498.              string.  If PATTERN is also omitted, splits on whi-
  1499.              tespace (/[ \t\n]+/).  Anything matching PATTERN is
  1500.              taken to be a delimiter separating the fields.
  1501.              (Note that the delimiter may be longer than one
  1502.              character.) Trailing null fields are stripped, which
  1503.              potential users of pop() would do well to remember.
  1504.              A pattern matching the null string (not to be con-
  1505.              fused with a null pattern) will split the value of
  1506.              EXPR into separate characters at each point it
  1507.              matches that way.  For example:
  1508.  
  1509.  
  1510.  
  1511.  
  1512. Printed 7/26/88               LOCAL                            23
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1520.  
  1521.  
  1522.  
  1523.                   print join(':',split(/ */,'hi there'));
  1524.  
  1525.              produces the output 'h:i:t:h:e:r:e'.
  1526.  
  1527.              The pattern /PATTERN/ may be replaced with an
  1528.              expression to specify patterns that vary at runtime.
  1529.              As a special case, specifying a space (' ') will
  1530.              split on white space just as split with no arguments
  1531.              does, but leading white space does NOT produce a
  1532.              null first field.  Thus, split(' ') can be used to
  1533.              emulate awk's default behavior, whereas split(/ /)
  1534.              will give you as many null initial fields as there
  1535.              are leading spaces.
  1536.  
  1537.              Example:
  1538.  
  1539.                   open(passwd, '/etc/passwd');
  1540.                   while (<passwd>) {
  1541.                        ($login, $passwd, $uid, $gid, $gcos, $home, $shell)
  1542.                             = split(/:/);
  1543.                        ...
  1544.                   }
  1545.  
  1546.              (Note that $shell above will still have a newline on
  1547.              it.  See chop().) See also join.
  1548.  
  1549.      sprintf(FORMAT,LIST)
  1550.              Returns a string formatted by the usual printf con-
  1551.              ventions.  The * character is not supported.
  1552.  
  1553.      sqrt(EXPR)
  1554.              Return the square root of EXPR.
  1555.  
  1556.      stat(FILEHANDLE)
  1557.  
  1558.      stat(EXPR)
  1559.              Returns a 13-element array giving the statistics for
  1560.              a file, either the file opened via FILEHANDLE, or
  1561.              named by EXPR.  Typically used as follows:
  1562.  
  1563.                  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
  1564.                     $atime,$mtime,$ctime,$blksize,$blocks)
  1565.                         = stat($filename);
  1566.  
  1567.  
  1568.      substr(EXPR,OFFSET,LEN)
  1569.              Extracts a substring out of EXPR and returns it.
  1570.              First character is at offset 0, or whatever you've
  1571.              set $[ to.
  1572.  
  1573.      system LIST
  1574.              Does exactly the same thing as "exec LIST" except
  1575.  
  1576.  
  1577.  
  1578. Printed 7/26/88               LOCAL                            24
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1586.  
  1587.  
  1588.  
  1589.              that a fork is done first, and the parent process
  1590.              waits for the child process to complete.  Note that
  1591.              argument processing varies depending on the number
  1592.              of arguments.  The return value is the exit status
  1593.              of the program as returned by the wait() call.  To
  1594.              get the actual exit value divide by 256.  See also
  1595.              exec.
  1596.  
  1597.      symlink(OLDFILE,NEWFILE)
  1598.              Creates a new filename symbolically linked to the
  1599.              old filename.  Returns 1 for success, 0 otherwise.
  1600.              On systems that don't support symbolic links, pro-
  1601.              duces a fatal error.
  1602.  
  1603.      tell(FILEHANDLE)
  1604.  
  1605.      tell    Returns the current file position for FILEHANDLE.
  1606.              If FILEHANDLE is omitted, assumes the file last
  1607.              read.
  1608.  
  1609.      time    Returns the number of seconds since January 1, 1970.
  1610.              Suitable for feeding to gmtime() and localtime().
  1611.  
  1612.      times   Returns a four-element array giving the user and
  1613.              system times, in seconds, for this process and the
  1614.              children of this process.
  1615.  
  1616.                  ($user,$system,$cuser,$csystem) = times;
  1617.  
  1618.  
  1619.      tr/SEARCHLIST/REPLACEMENTLIST/
  1620.  
  1621.      y/SEARCHLIST/REPLACEMENTLIST/
  1622.              Translates all occurences of the characters found in
  1623.              the search list with the corresponding character in
  1624.              the replacement list.  It returns the number of
  1625.              characters replaced.  If no string is specified via
  1626.              the =~ or !~ operator, the $_ string is translated.
  1627.              (The string specified with =~ must be a string vari-
  1628.              able or array element, i.e. an lvalue.) For sed
  1629.              devotees, y is provided as a synonym for tr.  Exam-
  1630.              ples:
  1631.  
  1632.                  $ARGV[1] =~ y/A-Z/a-z/;   # canonicalize to lower case
  1633.  
  1634.                  $cnt = tr/*/*/;           # count the stars in $_
  1635.  
  1636.  
  1637.      umask(EXPR)
  1638.              Sets the umask for the process and returns the old
  1639.              one.
  1640.  
  1641.  
  1642.  
  1643.  
  1644. Printed 7/26/88               LOCAL                            25
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1652.  
  1653.  
  1654.  
  1655.      unlink LIST
  1656.              Deletes a list of files.  LIST may be an array.
  1657.              Returns the number of files successfully deleted.
  1658.              Note: in order to use the value you must put the
  1659.              whole thing in parentheses:
  1660.  
  1661.                   $cnt = (unlink 'a','b','c');
  1662.  
  1663.  
  1664.      unshift(ARRAY,LIST)
  1665.              Does the opposite of a shift.  Prepends list to the
  1666.              front of the array, and returns the number of ele-
  1667.              ments in the new array.
  1668.  
  1669.                   unshift(ARGV,'-e') unless $ARGV[0] =~ /^-/;
  1670.  
  1671.  
  1672.      values(ASSOC_ARRAY)
  1673.              Returns a normal array consisting of all the values
  1674.              of the named associative array.  The values are
  1675.              returned in an apparently random order, but it is
  1676.              the same order as either the keys() or each() func-
  1677.              tion produces (given that the associative array has
  1678.              not been modified).  See also keys() and each().
  1679.  
  1680.      write(FILEHANDLE)
  1681.  
  1682.      write(EXPR)
  1683.  
  1684.      write() Writes a formatted record (possibly multi-line) to
  1685.              the specified file, using the format associated with
  1686.              that file.  By default the format for a file is the
  1687.              one having the same name is the filehandle, but the
  1688.              format for the current output channel (see select)
  1689.              may be set explicitly by assigning the name of the
  1690.              format to the $~ variable.
  1691.  
  1692.              Top of form processing is handled automatically: if
  1693.              there is insufficient room on the current page for
  1694.              the formatted record, the page is advanced, a spe-
  1695.              cial top-of-page format is used to format the new
  1696.              page header, and then the record is written.  By
  1697.              default the top-of-page format is "top", but it may
  1698.              be set to the format of your choice by assigning the
  1699.              name to the $^ variable.
  1700.  
  1701.              If FILEHANDLE is unspecified, output goes to the
  1702.              current default output channel, which starts out as
  1703.              stdout but may be changed by the select operator.
  1704.              If the FILEHANDLE is an EXPR, then the expression is
  1705.              evaluated and the resulting string is used to look
  1706.              up the name of the FILEHANDLE at run time.  For more
  1707.  
  1708.  
  1709.  
  1710. Printed 7/26/88               LOCAL                            26
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1718.  
  1719.  
  1720.  
  1721.              on formats, see the section on formats later on.
  1722.  
  1723.      Subroutines
  1724.  
  1725.      A subroutine may be declared as follows:
  1726.  
  1727.          sub NAME BLOCK
  1728.  
  1729.  
  1730.      Any arguments passed to the routine come in as array @_,
  1731.      that is ($_[0], $_[1], ...).  The return value of the sub-
  1732.      routine is the value of the last expression evaluated.
  1733.      There are no local variables--everything is a global vari-
  1734.      able.
  1735.  
  1736.      A subroutine is called using the do operator.  (CAVEAT: For
  1737.      efficiency reasons recursive subroutine calls are not
  1738.      currently supported.  This restriction may go away in the
  1739.      future.  Then again, it may not.)
  1740.  
  1741.      Example:
  1742.  
  1743.           sub MAX {
  1744.                $max = pop(@_);
  1745.                while ($foo = pop(@_)) {
  1746.                     $max = $foo if $max < $foo;
  1747.                }
  1748.                $max;
  1749.           }
  1750.  
  1751.           ...
  1752.           $bestday = do MAX($mon,$tue,$wed,$thu,$fri);
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776. Printed 7/26/88               LOCAL                            27
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1784.  
  1785.  
  1786.  
  1787.      Example:
  1788.  
  1789.           # get a line, combining continuation lines
  1790.           #  that start with whitespace
  1791.           sub get_line {
  1792.                $thisline = $lookahead;
  1793.                line: while ($lookahead = <stdin>) {
  1794.                     if ($lookahead =~ /^[ \t]/) {
  1795.                          $thisline .= $lookahead;
  1796.                     }
  1797.                     else {
  1798.                          last line;
  1799.                     }
  1800.                }
  1801.                $thisline;
  1802.           }
  1803.  
  1804.           $lookahead = <stdin>;    # get first line
  1805.           while ($_ = get_line()) {
  1806.                ...
  1807.           }
  1808.  
  1809.      Use array assignment to name your formal arguments:
  1810.  
  1811.           sub maybeset {
  1812.                ($key,$value) = @_;
  1813.                $foo{$key} = $value unless $foo{$key};
  1814.           }
  1815.  
  1816.  
  1817.      Regular Expressions
  1818.  
  1819.      The patterns used in pattern matching are regular expres-
  1820.      sions such as those used by egrep(1).  In addition, \w
  1821.      matches an alphanumeric character and \W a nonalphanumeric.
  1822.      Word boundaries may be matched by \b, and non-boundaries by
  1823.      \B.  The bracketing construct ( ... ) may also be used,
  1824.      $<digit> matches the digit'th substring, where digit can
  1825.      range from 1 to 9.  (You can also use the old standby
  1826.      \<digit> in search patterns, but $<digit> also works in
  1827.      replacement patterns and in the block controlled by the
  1828.      current conditional.) $+ returns whatever the last bracket
  1829.      match matched.  $& returns the entire matched string.  Up to
  1830.      10 alternatives may given in a pattern, separated by |, with
  1831.      the caveat that ( ... | ... ) is illegal.  Examples:
  1832.  
  1833.           s/^([^ ]*) *([^ ]*)/$2 $1/;   # swap first two words
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842. Printed 7/26/88               LOCAL                            28
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1850.  
  1851.  
  1852.  
  1853.           if (/Time: (..):(..):(..)/) {
  1854.                $hours = $1;
  1855.                $minutes = $2;
  1856.                $seconds = $3;
  1857.           }
  1858.  
  1859.      By default, the ^ character matches only the beginning of
  1860.      the string, and perl does certain optimizations with the
  1861.      assumption that the string contains only one line.  You may,
  1862.      however, wish to treat a string as a multi-line buffer, such
  1863.      that the ^ will match after any newline within the string.
  1864.      At the cost of a little more overhead, you can do this by
  1865.      setting the variable $* to 1.  Setting it back to 0 makes
  1866.      perl revert to its old behavior.
  1867.  
  1868.      Formats
  1869.  
  1870.      Output record formats for use with the write operator may
  1871.      declared as follows:
  1872.  
  1873.          format NAME =
  1874.          FORMLIST
  1875.          .
  1876.  
  1877.      If name is omitted, format "stdout" is defined.  FORMLIST
  1878.      consists of a sequence of lines, each of which may be of one
  1879.      of three types:
  1880.  
  1881.      1.  A comment.
  1882.  
  1883.      2.  A "picture" line giving the format for one output line.
  1884.  
  1885.      3.  An argument line supplying values to plug into a picture
  1886.          line.
  1887.  
  1888.      Picture lines are printed exactly as they look, except for
  1889.      certain fields that substitute values into the line.  Each
  1890.      picture field starts with either @ or ^.  The @ field (not
  1891.      to be confused with the array marker @) is the normal case;
  1892.      ^ fields are used to do rudimentary multi-line text block
  1893.      filling.  The length of the field is supplied by padding out
  1894.      the field with multiple <, >, or | characters to specify,
  1895.      respectively, left justfication, right justification, or
  1896.      centering.  If any of the values supplied for these fields
  1897.      contains a newline, only the text up to the newline is
  1898.      printed.  The special field @* can be used for printing
  1899.      multi-line values.  It should appear by itself on a line.
  1900.  
  1901.      The values are specified on the following line, in the same
  1902.      order as the picture fields.  They must currently be either
  1903.      string variable names or string literals (or pseudo-
  1904.      literals).  Currently you can separate values with spaces,
  1905.  
  1906.  
  1907.  
  1908. Printed 7/26/88               LOCAL                            29
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1916.  
  1917.  
  1918.  
  1919.      but commas may be placed between values to prepare for pos-
  1920.      sible future versions in which full expressions are allowed
  1921.      as values.
  1922.  
  1923.      Picture fields that begin with ^ rather than @ are treated
  1924.      specially.  The value supplied must be a string variable
  1925.      name which contains a text string.  Perl puts as much text
  1926.      as it can into the field, and then chops off the front of
  1927.      the string so that the next time the string variable is
  1928.      referenced, more of the text can be printed.  Normally you
  1929.      would use a sequence of fields in a vertical stack to print
  1930.      out a block of text.  If you like, you can end the final
  1931.      field with ..., which will appear in the output if the text
  1932.      was too long to appear in its entirety.
  1933.  
  1934.      Since use of ^ fields can produce variable length records if
  1935.      the text to be formatted is short, you can suppress blank
  1936.      lines by putting the tilde (~) character anywhere in the
  1937.      line.  (Normally you should put it in the front if possi-
  1938.      ble.) The tilde will be translated to a space upon output.
  1939.  
  1940.      Examples:
  1941.  
  1942.      # a report on the /etc/passwd file
  1943.      format top =
  1944.                              Passwd File
  1945.      Name                Login    Office   Uid   Gid Home
  1946.      ------------------------------------------------------------------
  1947.      .
  1948.      format stdout =
  1949.      @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
  1950.      $name               $login   $office $uid $gid  $home
  1951.      .
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974. Printed 7/26/88               LOCAL                            30
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981. PERL(1)             UNIX Programmer's Manual              PERL(1)
  1982.  
  1983.  
  1984.  
  1985.      # a report from a bug report form
  1986.      format top =
  1987.                              Bug Reports
  1988.      @<<<<<<<<<<<<<<<<<<<<<<<     @|||         @>>>>>>>>>>>>>>>>>>>>>>>
  1989.      $system;                      $%;         $date
  1990.      ------------------------------------------------------------------
  1991.      .
  1992.      format stdout =
  1993.      Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1994.               $subject
  1995.      Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1996.             $index                        $description
  1997.      Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  1998.                $priority         $date    $description
  1999.      From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2000.            $from                          $description
  2001.      Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2002.                   $programmer             $description
  2003.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2004.                                           $description
  2005.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2006.                                           $description
  2007.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2008.                                           $description
  2009.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  2010.                                           $description
  2011.      ~                                    ^<<<<<<<<<<<<<<<<<<<<<<<...
  2012.                                           $description
  2013.      .
  2014.  
  2015.      It is possible to intermix prints with writes on the same output channel,
  2016.      but you'll have to handle $- (lines left on the page) yourself.
  2017.  
  2018.      If you are printing lots of fields that are usually blank,
  2019.      you should consider using the reset operator between
  2020.      records.  Not only is it more efficient, but it can prevent
  2021.      the bug of adding another field and forgetting to zero it.
  2022.  
  2023.      Predefined Names
  2024.  
  2025.      The following names have special meaning to perl.  I could
  2026.      have used alphabetic symbols for some of these, but I didn't
  2027.      want to take the chance that someone would say reset "a-zA-
  2028.      Z" and wipe them all out.  You'll just have to suffer along
  2029.      with these silly symbols.  Most of them have reasonable
  2030.      mnemonics, or analogues in one of the shells.
  2031.  
  2032.      $_      The default input and pattern-searching space.  The
  2033.              following pairs are equivalent:
  2034.  
  2035.                   while (<>) {...     # only equivalent in while!
  2036.                   while ($_ = <>) {...
  2037.  
  2038.  
  2039.  
  2040. Printed 7/26/88               LOCAL                            31
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2048.  
  2049.  
  2050.  
  2051.                   /^Subject:/
  2052.                   $_ =~ /^Subject:/
  2053.  
  2054.                   y/a-z/A-Z/
  2055.                   $_ =~ y/a-z/A-Z/
  2056.  
  2057.                   chop
  2058.                   chop($_)
  2059.  
  2060.              (Mnemonic: underline is understood in certain opera-
  2061.              tions.)
  2062.  
  2063.      $.      The current input line number of the last file that
  2064.              was read.  Readonly.  (Mnemonic: many programs use .
  2065.              to mean the current line number.)
  2066.  
  2067.      $/      The input record separator, newline by default.
  2068.              Works like awk's RS variable, including treating
  2069.              blank lines as delimiters if set to the null string.
  2070.              If set to a value longer than one character, only
  2071.              the first character is used.  (Mnemonic: / is used
  2072.              to delimit line boundaries when quoting poetry.)
  2073.  
  2074.      $,      The output field separator for the print operator.
  2075.              Ordinarily the print operator simply prints out the
  2076.              comma separated fields you specify.  In order to get
  2077.              behavior more like awk, set this variable as you
  2078.              would set awk's OFS variable to specify what is
  2079.              printed between fields.  (Mnemonic: what is printed
  2080.              when there is a , in your print statement.)
  2081.  
  2082.      $\      The output record separator for the print operator.
  2083.              Ordinarily the print operator simply prints out the
  2084.              comma separated fields you specify, with no trailing
  2085.              newline or record separator assumed.  In order to
  2086.              get behavior more like awk, set this variable as you
  2087.              would set awk's ORS variable to specify what is
  2088.              printed at the end of the print.  (Mnemonic: you set
  2089.              $\ instead of adding \n at the end of the print.
  2090.              Also, it's just like /, but it's what you get "back"
  2091.              from perl.)
  2092.  
  2093.      $#      The output format for printed numbers.  This vari-
  2094.              able is a half-hearted attempt to emulate awk's OFMT
  2095.              variable.  There are times, however, when awk and
  2096.              perl have differing notions of what is in fact
  2097.              numeric.  Also, the initial value is %.20g rather
  2098.              than %.6g, so you need to set $# explicitly to get
  2099.              awk's value.  (Mnemonic: # is the number sign.)
  2100.  
  2101.      $%      The current page number of the currently selected
  2102.              output channel.  (Mnemonic: % is page number in
  2103.  
  2104.  
  2105.  
  2106. Printed 7/26/88               LOCAL                            32
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2114.  
  2115.  
  2116.  
  2117.              nroff.)
  2118.  
  2119.      $=      The current page length (printable lines) of the
  2120.              currently selected output channel.  Default is 60.
  2121.              (Mnemonic: = has horizontal lines.)
  2122.  
  2123.      $-      The number of lines left on the page of the
  2124.              currently selected output channel.  (Mnemonic:
  2125.              lines_on_page - lines_printed.)
  2126.  
  2127.      $~      The name of the current report format for the
  2128.              currently selected output channel.  (Mnemonic:
  2129.              brother to $^.)
  2130.  
  2131.      $^      The name of the current top-of-page format for the
  2132.              currently selected output channel.  (Mnemonic:
  2133.              points to top of page.)
  2134.  
  2135.      $|      If set to nonzero, forces a flush after every write
  2136.              or print on the currently selected output channel.
  2137.              Default is 0.  Note that stdout will typically be
  2138.              line buffered if output is to the terminal and block
  2139.              buffered otherwise.  Setting this variable is useful
  2140.              primarily when you are outputting to a pipe, such as
  2141.              when you are running a perl script under rsh and
  2142.              want to see the output as it's happening.
  2143.              (Mnemonic: when you want your pipes to be piping
  2144.              hot.)
  2145.  
  2146.      $$      The process number of the perl running this script.
  2147.              (Mnemonic: same as shells.)
  2148.  
  2149.      $?      The status returned by the last backtick (``) com-
  2150.              mand.  (Mnemonic: same as sh and ksh.)
  2151.  
  2152.      $+      The last bracket matched by the last search pattern.
  2153.              This is useful if you don't know which of a set of
  2154.              alternative patterns matched.  For example:
  2155.  
  2156.                  /Version: (.*)|Revision: (.*)/ && ($rev = $+);
  2157.  
  2158.              (Mnemonic: be positive and forward looking.)
  2159.  
  2160.      $*      Set to 1 to do multiline matching within a string, 0
  2161.              to assume strings contain a single line.  Default is
  2162.              0.  (Mnemonic: * matches multiple things.)
  2163.  
  2164.      $0      Contains the name of the file containing the perl
  2165.              script being executed.  The value should be copied
  2166.              elsewhere before any pattern matching happens, which
  2167.              clobbers $0.  (Mnemonic: same as sh and ksh.)
  2168.  
  2169.  
  2170.  
  2171.  
  2172. Printed 7/26/88               LOCAL                            33
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2180.  
  2181.  
  2182.  
  2183.      $<digit>
  2184.              Contains the subpattern from the corresponding set
  2185.              of parentheses in the last pattern matched, not
  2186.              counting patterns matched in nested blocks that have
  2187.              been exited already.  (Mnemonic: like \digit.)
  2188.  
  2189.      $[      The index of the first element in an array, and of
  2190.              the first character in a substring.  Default is 0,
  2191.              but you could set it to 1 to make perl behave more
  2192.              like awk (or Fortran) when subscripting and when
  2193.              evaluating the index() and substr() functions.
  2194.              (Mnemonic: [ begins subscripts.)
  2195.  
  2196.      $!      The current value of errno, with all the usual
  2197.              caveats.  (Mnemonic: What just went bang?)
  2198.  
  2199.      $@      The error message from the last eval command.  If
  2200.              null, the last eval parsed and executed correctly.
  2201.              (Mnemonic: Where was the syntax error "at"?)
  2202.  
  2203.      @ARGV   The array ARGV contains the command line arguments
  2204.              intended for the script.  Note that $#ARGV is the
  2205.              generally number of arguments minus one, since
  2206.              $ARGV[0] is the first argument, NOT the command
  2207.              name.  See $0 for the command name.
  2208.  
  2209.      $ENV{expr}
  2210.              The associative array ENV contains your current
  2211.              environment.  Setting a value in ENV changes the
  2212.              environment for child processes.
  2213.  
  2214.      $SIG{expr}
  2215.              The associative array SIG is used to set signal
  2216.              handlers for various signals.  Example:
  2217.  
  2218.                   sub handler {  # 1st argument is signal name
  2219.                        ($sig) = @_;
  2220.                        print "Caught a SIG$sig--shutting down0;
  2221.                        close(log);
  2222.                        exit(0);
  2223.                   }
  2224.  
  2225.                   $SIG{'INT'} = 'handler';
  2226.                   $SIG{'QUIT'} = 'handler';
  2227.                   ...
  2228.                   $SIG{'INT'} = 'DEFAULT'; # restore default action
  2229.                   $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
  2230.  
  2231.  
  2232. ENVIRONMENT
  2233.      Perl currently uses no environment variables, except to make
  2234.      them available to the script being executed, and to child
  2235.  
  2236.  
  2237.  
  2238. Printed 7/26/88               LOCAL                            34
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2246.  
  2247.  
  2248.  
  2249.      processes.  However, scripts running setuid would do well to
  2250.      execute the following lines before doing anything else, just
  2251.      to keep people honest:
  2252.  
  2253.          $ENV{'PATH'} = '/bin:/usr/bin';    # or whatever you need
  2254.          $ENV{'SHELL'} = '/bin/sh' if $ENV{'SHELL'};
  2255.          $ENV{'IFS'} = '' if $ENV{'IFS'};
  2256.  
  2257.  
  2258. AUTHOR
  2259.      Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  2260.  
  2261. FILES
  2262.      /tmp/perl-eXXXXXX   temporary file for -e commands.
  2263.  
  2264. SEE ALSO
  2265.      a2p  awk to perl translator
  2266.      s2p  sed to perl translator
  2267.      perldb    interactive perl debugger
  2268.  
  2269. DIAGNOSTICS
  2270.      Compilation errors will tell you the line number of the
  2271.      error, with an indication of the next token or token type
  2272.      that was to be examined.  (In the case of a script passed to
  2273.      perl via -e switches, each -e is counted as one line.)
  2274.  
  2275. TRAPS
  2276.      Accustomed awk users should take special note of the follow-
  2277.      ing:
  2278.  
  2279.      *   Semicolons are required after all simple statements in
  2280.          perl.  Newline is not a statement delimiter.
  2281.  
  2282.      *   Curly brackets are required on ifs and whiles.
  2283.  
  2284.      *   Variables begin with $ or @ in perl.
  2285.  
  2286.      *   Arrays index from 0 unless you set $[.  Likewise string
  2287.          positions in substr() and index().
  2288.  
  2289.      *   You have to decide whether your array has numeric or
  2290.          string indices.
  2291.  
  2292.      *   You have to decide whether you want to use string or
  2293.          numeric comparisons.
  2294.  
  2295.      *   Reading an input line does not split it for you.  You
  2296.          get to split it yourself to an array.  And split has
  2297.          different arguments.
  2298.  
  2299.      *   The current input line is normally in $_, not $0.  It
  2300.          generally does not have the newline stripped.  ($0 is
  2301.  
  2302.  
  2303.  
  2304. Printed 7/26/88               LOCAL                            35
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2312.  
  2313.  
  2314.  
  2315.          initially the name of the program executed, then the
  2316.          last matched string.)
  2317.  
  2318.      *   The current filename is $ARGV, not $FILENAME.  NR, RS,
  2319.          ORS, OFS, and OFMT have equivalents with other symbols.
  2320.          FS doesn't have an equivalent, since you have to be
  2321.          explicit about split statements.
  2322.  
  2323.      *   $<digit> does not refer to fields--it refers to sub-
  2324.          strings matched by the last match pattern.
  2325.  
  2326.      *   The print statement does not add field and record
  2327.          separators unless you set $, and $\.
  2328.  
  2329.      *   You must open your files before you print to them.
  2330.  
  2331.      *   The range operator is "..", not comma.  (The comma
  2332.          operator works as in C.)
  2333.  
  2334.      *   The match operator is "=~", not "~".  ("~" is the one's
  2335.          complement operator.)
  2336.  
  2337.      *   The concatenation operator is ".", not the null string.
  2338.          (Using the null string would render "/pat/ /pat/"
  2339.          unparseable, since the third slash would be interpreted
  2340.          as a division operator--the tokener is in fact slightly
  2341.          context sensitive for operators like /, ?, and <.  And
  2342.          in fact, . itself can be the beginning of a number.)
  2343.  
  2344.      *   The \nnn construct in patterns must be given as [\nnn]
  2345.          to avoid interpretation as a backreference.
  2346.  
  2347.      *   Next, exit, and continue work differently.
  2348.  
  2349.      *   When in doubt, run the awk construct through a2p and see
  2350.          what it gives you.
  2351.  
  2352.      Cerebral C programmers should take note of the following:
  2353.  
  2354.      *   Curly brackets are required on ifs and whiles.
  2355.  
  2356.      *   You should use "elsif" rather than "else if"
  2357.  
  2358.      *   Break and continue become last and next, respectively.
  2359.  
  2360.      *   There's no switch statement.
  2361.  
  2362.      *   Variables begin with $ or @ in perl.
  2363.  
  2364.      *   Printf does not implement *.
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370. Printed 7/26/88               LOCAL                            36
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377. PERL(1)             UNIX Programmer's Manual              PERL(1)
  2378.  
  2379.  
  2380.  
  2381.      *   Comments begin with #, not /*.
  2382.  
  2383.      *   You can't take the address of anything.
  2384.  
  2385.      *   Subroutines are not reentrant.
  2386.  
  2387.      *   ARGV must be capitalized.
  2388.  
  2389.      *   The "system" calls link, unlink, rename, etc. return 1
  2390.          for success, not 0.
  2391.  
  2392.      *   Signal handlers deal with signal names, not numbers.
  2393.  
  2394.      Seasoned sed programmers should take note of the following:
  2395.  
  2396.      *   Backreferences in substitutions use $ rather than \.
  2397.  
  2398.      *   The pattern matching metacharacters (, ), and | do not
  2399.          have backslashes in front.
  2400.  
  2401. BUGS
  2402.      You can't currently dereference array elements inside a
  2403.      double-quoted string.  You must assign them to a temporary
  2404.      and interpolate that.
  2405.  
  2406.      Associative arrays really ought to be first class objects.
  2407.  
  2408.      Recursive subroutines are not currently supported, due to
  2409.      the way temporary values are stored in the syntax tree.
  2410.  
  2411.      Arrays ought to be passable to subroutines just as strings
  2412.      are.
  2413.  
  2414.      The array literal consisting of one element is currently
  2415.      misinterpreted, i.e.
  2416.  
  2417.           @array = (123);
  2418.  
  2419.      doesn't work right.
  2420.  
  2421.      Perl actually stands for Pathologically Eclectic Rubbish
  2422.      Lister, but don't tell anyone I said that.
  2423.  
  2424.  
  2425. Printed 7/26/88               LOCAL                            37
  2426.